Практика
Практика
Продолжаем работу с калькулятором
Настало время небольшой практики. Вернёмся к нашему проекту - калькулятор на HTML, и в файле script.js реализуем логику калькулятора:
- создайте новый файл script.js;
- получите элементы из DOM-дерева и определите их как переменные (или константы);
- добавьте обработку кнопок через цикл - сделайте проверку на текст кнопки;
- добавьте переменные (или константы) a и b для чисел-операндов;
- не забудьте добавить проверку деления на 0.
Добавьте в HTML связь со скриптом:
<script src="script.js"></script>
Вот пример простейшего скрипта для нас:
const num1 = document.getElementById('num1');
const num2 = document.getElementById('num2');
const result = document.getElementById('result');
const error = document.getElementById('error');
const buttons = document.querySelectorAll('.buttons button');
const equals = document.querySelector('.equals');
let operation = null;
buttons.forEach(button => {
button.addEventListener('click', () => {
operation = button.textContent;
});
});
equals.addEventListener('click', () => {
const a = Number(num1.value);
const b = Number(num2.value);
if (!operation) {
error.textContent = 'Выберите операцию';
return;
}
let res;
switch(operation) {
case '+': res = a + b; break;
case '-': res = a - b; break;
case '×': res = a * b; break;
case '÷': res = b !== 0 ? a / b : 'Ошибка';
}
result.textContent = res === 'Ошибка' ? res : res.toFixed(2);
error.textContent = res === 'Ошибка' ? 'Деление на ноль' : '';
});
Итоговая логика будет такая:
- указывается первое и второе число (операнды);
- выбирается операция;
- запрашивается результат;
- выполняется вычисление и результат выводится:
Можете разбавить проект своей дополнительной логикой и вычислениями.
Полезные JavaScript-сниппеты для повседневной практики
Ниже приведена подборка универсальных и часто используемых фрагментов кода на JavaScript. Эти сниппеты подходят как для начинающих, так и для опытных разработчиков.
Получение параметров из URL
const urlParams = new URLSearchParams(window.location.search);
const userId = urlParams.get('user_id');
const theme = urlParams.get('theme') || 'light';
Этот код извлекает значения GET-параметров из адресной строки. Если параметр отсутствует, можно задать значение по умолчанию.
Проверка типа данных
function isString(value) {
return typeof value === 'string';
}
function isArray(value) {
return Array.isArray(value);
}
function isObject(value) {
return value !== null && typeof value === 'object' && !Array.isArray(value);
}
function isFunction(value) {
return typeof value === 'function';
}
Такие функции помогают безопасно определять тип переменной перед выполнением операций.
Проверка на null и undefined
function isNullish(value) {
return value === null || value === undefined;
}
// Или с использованием оператора нулевого слияния (для значений по умолчанию)
const name = inputName ?? 'Гость';
Полезно при валидации входных данных или конфигураций.
Генерация уникального ID
function generateId() {
return Date.now().toString(36) + Math.random().toString(36).substring(2);
}
Простой способ создать уникальную строку без использования сторонних библиотек. Подходит для временных идентификаторов.
Создание DOM-элемента
function createElement(tag, attributes = {}, children = []) {
const element = document.createElement(tag);
Object.entries(attributes).forEach(([key, value]) => {
element.setAttribute(key, value);
});
children.forEach(child => {
if (typeof child === 'string') {
element.appendChild(document.createTextNode(child));
} else {
element.appendChild(child);
}
});
return element;
}
// Пример использования:
const button = createElement('button', { class: 'btn primary' }, ['Нажми меня']);
document.body.appendChild(button);
Упрощает динамическое создание интерфейсов без шаблонных строк.
Копирование текста в буфер обмена
async function copyToClipboard(text) {
try {
await navigator.clipboard.writeText(text);
console.log('Скопировано в буфер обмена');
} catch (err) {
console.error('Не удалось скопировать:', err);
}
}
Современный способ копирования, работающий в большинстве браузеров. Требует HTTPS или локального хоста.
Ожидание (задержка)
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Пример использования:
await wait(1000); // Пауза на 1 секунду
Полезно при имитации загрузки, анимациях или тестировании асинхронных операций.
Форматирование даты
function formatDate(date, locale = 'ru-RU') {
return new Intl.DateTimeFormat(locale, {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
}).format(date);
}
// Пример:
console.log(formatDate(new Date())); // "18 марта 2026 г., 14:30"
Использует встроенный API Intl для локализованного формата без внешних зависимостей.
Работа с массивами: создание списков
// Создание списка чисел от start до end
function range(start, end) {
return Array.from({ length: end - start + 1 }, (_, i) => start + i);
}
// Пример:
console.log(range(1, 5)); // [1, 2, 3, 4, 5]
Удобно для генерации тестовых данных или заполнения выпадающих списков.
Создание объекта из пар ключ-значение
function createObject(keys, values) {
const obj = {};
keys.forEach((key, index) => {
obj[key] = values[index];
});
return obj;
}
// Или через Object.fromEntries:
const obj = Object.fromEntries([
['name', 'Алиса'],
['age', 30]
]);
Полезно при преобразовании данных из форм или API-ответов.
Работа с промисами: выполнение всех или любого
// Все промисы должны завершиться успешно
Promise.all([fetch('/api/user'), fetch('/api/profile')])
.then(responses => Promise.all(responses.map(r => r.json())))
.then(Данные => console.log(Данные));
// Достаточно одного успешного
Promise.any([fetch('/mirror1/Данные'), fetch('/mirror2/Данные')])
.then(response => response.json())
.then(Данные => console.log('Получено:', Данные));
Promise.all — для строгой последовательности, Promise.any — для отказоустойчивых запросов.
Циклы: итерация по объекту
const user = { name: 'Борис', age: 28, city: 'Казань' };
// Только собственные перечисляемые свойства
for (const key in user) {
if (Object.hasOwn(user, key)) {
console.log(`${key}: ${user[key]}`);
}
}
// Или через Object.entries:
Object.entries(user).forEach(([key, value]) => {
console.log(`${key}: ${value}`);
});
Безопасный способ обхода объектов без наследуемых свойств.
Тестирование: простая функция assert
function assert(condition, message = 'Assertion failed') {
if (!condition) {
throw new Error(message);
}
}
// Пример:
assert(typeof calculate(2, 3) === 'number', 'calculate должен возвращать число');
Минималистичная замена полноценным тестовым фреймворкам для быстрой проверки логики.
Обработка ошибок в асинхронных функциях
async function safeFetch(url) {
try {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return await response.json();
} catch (error) {
console.error('Ошибка запроса:', error.message);
return null;
}
}
Обеспечивает устойчивость к сетевым сбоям и некорректным ответам сервера.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). ECMAScript — это официальный стандарт языка JavaScript, определяющий его синтаксис, семантику и встроенные объекты. Он описывает поведение языка независимо от среды выполнения (браузер, Node.js и… Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Для создания массивов используется литеральная нотация. Конструктор Array не применяется. Как работать с HTML-элементами, как их создавать, менять. JavaScript — это язык программирования, который изначально создавался для работы в веб-браузерах. Сегодня он является универсальным инструментом, позволяющим создавать серверные приложения, утилиты… Потребность в интерактивности возникла по мере роста сложности веб-сервисов. В частности, уже в первой половине 1990-х года в компании Netscape Communications, разрабатывавшей браузер Netscape… Такое именование представляет собой соглашение между разработчиками. Классический JavaScript не обеспечивает реальной приватности через подчеркивания. JavaScript содержит набор зарезервированных слов, которые имеют специальное значение в языке. Эти слова нельзя использовать в качестве идентификаторов для переменных, функций или классов. Функция Значение Пример --------------------------- Array.isArray() Проверяет, является ли значение массивом Array.isArray(1, 2) concat() Объединяет массивы 1, 2.concat(3, 4) push() Добавляет элемент… Этот шаблон описывает подключение внешних функций, классов или значений из других файлов. Он используется в начале файла и определяет зависимости текущего модуля. JavaScript используется для создания кроссплатформенных мобильных приложений, которые работают на iOS и Android с использованием единой кодовой базы. Что такое функция, параметры, аргументы, возврат значения.Основы JavaScript
Что требуется знать перед началом изучения языка программирования
Рекомендации по разработке на JavaScript
Работа с HTML в JavaScript
Простые приложения на JavaScript
История языка JavaScript
Синтаксис и пунктуация в JavaScript
Ключевые слова языка JavaScript
Встроенные функции JavaScript
Структура и подключение JavaScript-кода
Применение JavaScript в вебе и за его пределами
Функции в JavaScript